<!DOCTYPE html>
<html lang="en" dir="ltr" class="client-nojs">
<head>
<title>User-defined literals (since C++11) - cppreference.com</title>
<meta charset="UTF-8">
<meta name="generator" content="MediaWiki 1.21.2">
<link rel="shortcut icon" href="../../../common/favicon.ico">
<link rel="stylesheet" href="../../../common/ext.css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" href="../../../common/site_modules.css">
<style>a:lang(ar),a:lang(ckb),a:lang(fa),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}#toc{display:none}.editsection{display:none}
/* cache key: mwiki1-mwiki_en_:resourceloader:filter:minify-css:7:472787eddcf4605d11de8c7ef047234f */</style>

<script src="../../../common/startup_scripts.js"></script>
<script>if(window.mw){
mw.config.set({"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"cpp/language/user_literal","wgTitle":"cpp/language/user literal","wgCurRevisionId":139788,"wgArticleId":5061,"wgIsArticle":true,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[],"wgBreakFrames":false,"wgPageContentLanguage":"en","wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgMonthNamesShort":["","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"wgRelevantPageName":"cpp/language/user_literal","wgRestrictionEdit":[],"wgRestrictionMove":[]});
}</script><script>if(window.mw){
mw.loader.implement("user.options",function(){mw.user.options.set({"ccmeonemails":0,"cols":80,"date":"default","diffonly":0,"disablemail":0,"disablesuggest":0,"editfont":"default","editondblclick":0,"editsection":0,"editsectiononrightclick":0,"enotifminoredits":0,"enotifrevealaddr":0,"enotifusertalkpages":1,"enotifwatchlistpages":0,"extendwatchlist":0,"externaldiff":0,"externaleditor":0,"fancysig":0,"forceeditsummary":0,"gender":"unknown","hideminor":0,"hidepatrolled":0,"imagesize":2,"justify":0,"math":1,"minordefault":0,"newpageshidepatrolled":0,"nocache":0,"noconvertlink":0,"norollbackdiff":0,"numberheadings":0,"previewonfirst":0,"previewontop":1,"quickbar":5,"rcdays":7,"rclimit":50,"rememberpassword":0,"rows":25,"searchlimit":20,"showhiddencats":0,"showjumplinks":1,"shownumberswatching":1,"showtoc":0,"showtoolbar":1,"skin":"cppreference2","stubthreshold":0,"thumbsize":2,"underline":2,"uselivepreview":0,"usenewrc":0,"watchcreations":0,"watchdefault":0,"watchdeletion":0,
"watchlistdays":3,"watchlisthideanons":0,"watchlisthidebots":0,"watchlisthideliu":0,"watchlisthideminor":0,"watchlisthideown":0,"watchlisthidepatrolled":0,"watchmoves":0,"wllimit":250,"variant":"en","language":"en","searchNs0":true,"searchNs1":false,"searchNs2":false,"searchNs3":false,"searchNs4":false,"searchNs5":false,"searchNs6":false,"searchNs7":false,"searchNs8":false,"searchNs9":false,"searchNs10":false,"searchNs11":false,"searchNs12":false,"searchNs13":false,"searchNs14":false,"searchNs15":false,"gadget-ColiruCompiler":1,"gadget-MathJax":1});;},{},{});mw.loader.implement("user.tokens",function(){mw.user.tokens.set({"editToken":"+\\","patrolToken":false,"watchToken":false});;},{},{});
/* cache key: mwiki1-mwiki_en_:resourceloader:filter:minify-js:7:9f05c6caceb9bb1a482b6cebd4c5a330 */
}</script>
<script>if(window.mw){
mw.loader.load(["mediawiki.page.startup","mediawiki.legacy.wikibits","mediawiki.legacy.ajax"]);
}</script>
<style type="text/css">/*<![CDATA[*/
.source-cpp {line-height: normal;}
.source-cpp li, .source-cpp pre {
	line-height: normal; border: 0px none white;
}
/**
 * GeSHi Dynamically Generated Stylesheet
 * --------------------------------------
 * Dynamically generated stylesheet for cpp
 * CSS class: source-cpp, CSS id: 
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 * --------------------------------------
 */
.cpp.source-cpp .de1, .cpp.source-cpp .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.cpp.source-cpp  {font-family:monospace;}
.cpp.source-cpp .imp {font-weight: bold; color: red;}
.cpp.source-cpp li, .cpp.source-cpp .li1 {font-weight: normal; vertical-align:top;}
.cpp.source-cpp .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.cpp.source-cpp .li2 {font-weight: bold; vertical-align:top;}
.cpp.source-cpp .kw1 {color: #0000dd;}
.cpp.source-cpp .kw2 {color: #0000ff;}
.cpp.source-cpp .kw3 {color: #0000dd;}
.cpp.source-cpp .kw4 {color: #0000ff;}
.cpp.source-cpp .co1 {color: #909090;}
.cpp.source-cpp .co2 {color: #339900;}
.cpp.source-cpp .coMULTI {color: #ff0000; font-style: italic;}
.cpp.source-cpp .es0 {color: #008000; font-weight: bold;}
.cpp.source-cpp .es1 {color: #008000; font-weight: bold;}
.cpp.source-cpp .es2 {color: #008000; font-weight: bold;}
.cpp.source-cpp .es3 {color: #008000; font-weight: bold;}
.cpp.source-cpp .es4 {color: #008000; font-weight: bold;}
.cpp.source-cpp .es5 {color: #008000; font-weight: bold;}
.cpp.source-cpp .br0 {color: #008000;}
.cpp.source-cpp .sy0 {color: #008000;}
.cpp.source-cpp .sy1 {color: #000080;}
.cpp.source-cpp .sy2 {color: #000040;}
.cpp.source-cpp .sy3 {color: #000040;}
.cpp.source-cpp .sy4 {color: #008080;}
.cpp.source-cpp .st0 {color: #008000;}
.cpp.source-cpp .nu0 {color: #000080;}
.cpp.source-cpp .nu6 {color: #000080;}
.cpp.source-cpp .nu8 {color: #000080;}
.cpp.source-cpp .nu12 {color: #000080;}
.cpp.source-cpp .nu16 {color:#000080;}
.cpp.source-cpp .nu17 {color:#000080;}
.cpp.source-cpp .nu18 {color:#000080;}
.cpp.source-cpp .nu19 {color:#000080;}
.cpp.source-cpp .ln-xtra, .cpp.source-cpp li.ln-xtra, .cpp.source-cpp div.ln-xtra {background-color: #ffc;}
.cpp.source-cpp span.xtra { display:block; }

/*]]>*/
</style><style type="text/css">/*<![CDATA[*/
.source-text {line-height: normal;}
.source-text li, .source-text pre {
	line-height: normal; border: 0px none white;
}
/**
 * GeSHi Dynamically Generated Stylesheet
 * --------------------------------------
 * Dynamically generated stylesheet for text
 * CSS class: source-text, CSS id: 
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 * --------------------------------------
 */
.text.source-text .de1, .text.source-text .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.text.source-text  {font-family:monospace;}
.text.source-text .imp {font-weight: bold; color: red;}
.text.source-text li, .text.source-text .li1 {font-weight: normal; vertical-align:top;}
.text.source-text .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.text.source-text .li2 {font-weight: bold; vertical-align:top;}
.text.source-text .ln-xtra, .text.source-text li.ln-xtra, .text.source-text div.ln-xtra {background-color: #ffc;}
.text.source-text span.xtra { display:block; }

/*]]>*/
</style><!--[if lt IE 7]><style type="text/css">body{behavior:url("/mwiki/skins/cppreference2/csshover.min.htc")}</style><![endif]--></head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_language_user_literal skin-cppreference2 action-view cpp-navbar">
        <!-- header -->
        <!-- /header -->
        <!-- content -->
<div id="cpp-content-base">
            <div id="content">
                <a id="top"></a>
                <div id="mw-js-message" style="display:none;"></div>
                                <!-- firstHeading -->
<h1 id="firstHeading" class="firstHeading">User-defined literals <span class="t-mark-rev t-since-cxx11">(since C++11)</span></h1>
                <!-- /firstHeading -->
                <!-- bodyContent -->
                <div id="bodyContent">
                                        <!-- tagline -->
                    <div id="siteSub">From cppreference.com</div>
                    <!-- /tagline -->
                                        <!-- subtitle -->
                    <div id="contentSub"><span class="subpages">&lt; <a href="../../cpp.html" title="cpp">cpp</a>‎ | <a href="../language.html" title="cpp/language">language</a></span></div>
                    <!-- /subtitle -->
                                                            <!-- bodycontent -->
                    <div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr"><div class="t-navbar" style=""><div class="t-navbar-sep"> </div><div class="t-navbar-head"><a href="../../cpp.html" title="cpp"> C++</a><div class="t-navbar-menu"><div><div><table class="t-nv-begin" cellpadding="0" style="line-height:1.1em;">
<tr class="t-nv"><td colspan="5"> <a href="../compiler_support.html" title="cpp/compiler support"> Compiler support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../freestanding.html" title="cpp/freestanding"> Freestanding and hosted</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../language.html" title="cpp/language"> Language</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../header.html" title="cpp/header"> Standard library headers</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../named_req.html" title="cpp/named req"> Named requirements </a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../feature_test.html" title="cpp/feature test"> Feature test macros </a> <span class="t-mark-rev t-since-cxx20">(C++20)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../utility.html#Language_support" title="cpp/utility"> Language support library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../concepts.html" title="cpp/concepts"> Concepts library</a> <span class="t-mark-rev t-since-cxx20">(C++20)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../meta.html" title="cpp/meta"> Metaprogramming library</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../error.html" title="cpp/error"> Diagnostics library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../utility.html" title="cpp/utility"> General utilities library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../string.html" title="cpp/string"> Strings library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../container.html" title="cpp/container"> Containers library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../iterator.html" title="cpp/iterator"> Iterators library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../ranges.html" title="cpp/ranges"> Ranges library</a> <span class="t-mark-rev t-since-cxx20">(C++20)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../algorithm.html" title="cpp/algorithm"> Algorithms library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../numeric.html" title="cpp/numeric"> Numerics library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../locale.html" title="cpp/locale"> Localizations library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../io.html" title="cpp/io"> Input/output library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../filesystem.html" title="cpp/filesystem"> Filesystem library</a> <span class="t-mark-rev t-since-cxx17">(C++17)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../regex.html" title="cpp/regex"> Regular expressions library</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../thread.html" title="cpp/thread"> Concurrency support library</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../experimental.html" title="cpp/experimental"> Technical specifications</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../symbol_index.html" title="cpp/symbol index"> Symbols index</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../links/libs.html" title="cpp/links/libs"> External libraries</a> </td></tr>
</table></div><div></div></div></div></div><div class="t-navbar-sep"> </div><div class="t-navbar-head"><a href="../language.html" title="cpp/language"> C++ language</a><div class="t-navbar-menu"><div><div style="display:inline-block">
<div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv-h1"><td colspan="5"> General topics</td></tr>
<tr class="t-nv-col-table"><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="../preprocessor.html" title="cpp/preprocessor"> Preprocessor</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../comments.html" title="cpp/comment"> Comments</a></td></tr>
</table></div></td><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="../keywords.html" title="cpp/keyword"> Keywords</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="escape.html" title="cpp/language/escape"> Escape sequences</a></td></tr>
</table></div></td></tr>
<tr class="t-nv-h1"><td colspan="5"> <a href="statements.html" title="cpp/language/statements"> Flow control</a></td></tr>
<tr class="t-nv-h2"><td colspan="5"> Conditional execution statements</td></tr>
<tr class="t-nv-col-table"><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="if.html" title="cpp/language/if"><tt>if</tt></a></td></tr>
</table></div></td><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="switch.html" title="cpp/language/switch"><tt>switch</tt></a></td></tr>
</table></div></td></tr>
<tr class="t-nv-h2"><td colspan="5"> Iteration statements (loops)</td></tr>
<tr class="t-nv-col-table"><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="for.html" title="cpp/language/for"><tt>for</tt></a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="range-for.html" title="cpp/language/range-for"> range-<code>for</code></a> <span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
</table></div></td><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="while.html" title="cpp/language/while"><tt>while</tt></a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="do.html" title="cpp/language/do"> <code>do-while</code></a></td></tr>
</table></div></td></tr>
<tr class="t-nv-h2"><td colspan="5"> Jump statements </td></tr>
<tr class="t-nv-col-table"><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="continue.html" title="cpp/language/continue"><tt>continue</tt></a> - <a href="break.html" title="cpp/language/break"><tt>break</tt></a></td></tr>
</table></div></td><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="goto.html" title="cpp/language/goto"><tt>goto</tt></a> - <a href="return.html" title="cpp/language/return"><tt>return</tt></a></td></tr>
</table></div></td></tr>
<tr class="t-nv-h1"><td colspan="5"> <a href="functions.html" title="cpp/language/functions"> Functions</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="function.html" title="cpp/language/function"> Function declaration</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="lambda.html" title="cpp/language/lambda"> Lambda function expression</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="inline.html" title="cpp/language/inline"> <code>inline</code> specifier</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="except_spec.html" title="cpp/language/except spec"> Dynamic exception specifications</a> <span class="t-mark-rev t-until-cxx20">(until C++20)</span></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="noexcept_spec.html" title="cpp/language/noexcept spec"> <code>noexcept</code> specifier</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
<tr class="t-nv-h1"><td colspan="5"> Exceptions</td></tr>
<tr class="t-nv-col-table"><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="throw.html" title="cpp/language/throw"> <code>throw</code>-expression</a></td></tr>
</table></div></td><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="try_catch.html" title="cpp/language/try catch"> <code>try</code>-<code>catch</code> block</a></td></tr>
</table></div></td></tr>
<tr class="t-nv-h1"><td colspan="5"> Namespaces</td></tr>
<tr class="t-nv-col-table"><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="namespace.html" title="cpp/language/namespace"> Namespace declaration</a>  </td></tr>
</table></div></td><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="namespace_alias.html" title="cpp/language/namespace alias"> Namespace aliases</a></td></tr>
</table></div></td></tr>
<tr class="t-nv-h1"><td colspan="5"> Types</td></tr>
<tr class="t-nv-col-table"><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="types.html" title="cpp/language/types"> Fundamental types</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="enum_class.html" title="cpp/language/enum"> Enumeration types</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="function.html" title="cpp/language/function"> Function types</a></td></tr>
</table></div></td><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="class.html" title="cpp/language/class"> Class/struct types</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="union.html" title="cpp/language/union"> Union types</a></td></tr>
</table></div></td></tr>
<tr class="t-nv-h2"><td colspan="5"> Specifiers</td></tr>
<tr class="t-nv-col-table"><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="decltype.html" title="cpp/language/decltype"><tt>decltype</tt></a> <span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="auto.html" title="cpp/language/auto"><tt>auto</tt></a> <span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="alignas.html" title="cpp/language/alignas"><tt>alignas</tt></a> <span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
</table></div></td><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="cv.html" title="cpp/language/cv"> <code>const</code>/<code>volatile</code></a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="constexpr.html" title="cpp/language/constexpr"><tt>constexpr</tt></a> <span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
</table></div></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="storage_duration.html" title="cpp/language/storage duration"> Storage duration specifiers</a></td></tr>
<tr class="t-nv-h2"><td colspan="5"> <a href="initialization.html" title="cpp/language/initialization"> Initialization</a></td></tr>
<tr class="t-nv-col-table"><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="default_initialization.html" title="cpp/language/default initialization"> Default initialization</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="value_initialization.html" title="cpp/language/value initialization"> Value initialization</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="zero_initialization.html" title="cpp/language/zero initialization"> Zero initialization</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="copy_initialization.html" title="cpp/language/copy initialization"> Copy initialization</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="direct_initialization.html" title="cpp/language/direct initialization"> Direct initialization</a></td></tr>
</table></div></td><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="aggregate_initialization.html" title="cpp/language/aggregate initialization"> Aggregate initialization</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="list_initialization.html" title="cpp/language/list initialization"> List initialization</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="constant_initialization.html" title="cpp/language/constant initialization"> Constant initialization</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="reference_initialization.html" title="cpp/language/reference initialization"> Reference initialization</a></td></tr>
</table></div></td></tr>
</table></div>
</div>
<div style="display:inline-block">
<div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv-h1"><td colspan="5"> <a href="expressions.html" title="cpp/language/expressions"> Expressions</a></td></tr>
<tr class="t-nv-col-table"><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="value_category.html" title="cpp/language/value category"> Value categories</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="eval_order.html" title="cpp/language/eval order"> Order of evaluation</a></td></tr>
</table></div></td><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="operators.html" title="cpp/language/operators"> Operators</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_precedence.html" title="cpp/language/operator precedence"> Operator precedence</a></td></tr>
</table></div></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_alternative.html" title="cpp/language/operator alternative"> Alternative representations</a></td></tr>
<tr class="t-nv-h2"><td colspan="5"> <a href="expressions.html#Literals" title="cpp/language/expressions"> Literals</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="bool_literal.html" title="cpp/language/bool literal"> Boolean</a> - <a href="integer_literal.html" title="cpp/language/integer literal"> Integer</a> - <a href="floating_literal.html" title="cpp/language/floating literal"> Floating-point</a></td></tr>   
<tr class="t-nv"><td colspan="5"> <a href="character_literal.html" title="cpp/language/character literal"> Character</a> - <a href="string_literal.html" title="cpp/language/string literal"> String</a> - <a href="nullptr.html" title="cpp/language/nullptr"><tt>nullptr</tt></a> <span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr> 
<tr class="t-nv"><td colspan="5"> <strong class="selflink"> User-defined</strong> <span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
<tr class="t-nv-h1"><td colspan="5"> Utilities</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="attributes.html" title="cpp/language/attributes"> Attributes</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
<tr class="t-nv-h2"><td colspan="5"> Types</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="typedef.html" title="cpp/language/typedef"> <code>typedef</code> declaration</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="type_alias.html" title="cpp/language/type alias"> Type alias declaration</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
<tr class="t-nv-h2"><td colspan="5"> Casts</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="implicit_cast.html" title="cpp/language/implicit conversion"> Implicit conversions</a> - <a href="explicit_cast.html" title="cpp/language/explicit cast"> Explicit conversions</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="static_cast.html" title="cpp/language/static cast"><tt>static_cast</tt></a> - <a href="dynamic_cast.html" title="cpp/language/dynamic cast"><tt>dynamic_cast</tt></a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="const_cast.html" title="cpp/language/const cast"><tt>const_cast</tt></a> - <a href="reinterpret_cast.html" title="cpp/language/reinterpret cast"><tt>reinterpret_cast</tt></a></td></tr>
<tr class="t-nv-h2"><td colspan="5"> Memory allocation</td></tr>
<tr class="t-nv-col-table"><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="new.html" title="cpp/language/new"> <code>new</code> expression</a></td></tr>
</table></div></td><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="delete.html" title="cpp/language/delete"> <code>delete</code> expression</a></td></tr>
</table></div></td></tr>
<tr class="t-nv-h1"><td colspan="5"> <a href="classes.html" title="cpp/language/classes"> Classes</a></td></tr>
<tr class="t-nv-col-table"><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="class.html" title="cpp/language/class"> Class declaration</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="initializer_list.html" title="cpp/language/constructor"> Constructors</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="this.html" title="cpp/language/this"> <code>this</code> pointer</a></td></tr>
</table></div></td><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="access.html" title="cpp/language/access"> Access specifiers</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="friend.html" title="cpp/language/friend"> <code>friend</code> specifier</a></td></tr>
</table></div></td></tr>
<tr class="t-nv-h2"><td colspan="5"> Class-specific function properties</td></tr>
<tr class="t-nv-col-table"><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="virtual.html" title="cpp/language/virtual"> Virtual function</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="override.html" title="cpp/language/override"> <code>override</code> specifier</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="final.html" title="cpp/language/final"> <code>final</code> specifier</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
</table></div></td><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="explicit.html" title="cpp/language/explicit"><tt>explicit</tt></a> <span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="static.html" title="cpp/language/static"><tt>static</tt></a> </td></tr>
</table></div></td></tr>
<tr class="t-nv-h2"><td colspan="5"> Special member functions</td></tr>
<tr class="t-nv-col-table"><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="default_constructor.html" title="cpp/language/default constructor"> Default constructor</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="copy_constructor.html" title="cpp/language/copy constructor"> Copy constructor</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="move_constructor.html" title="cpp/language/move constructor"> Move constructor</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
</table></div></td><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="as_operator.html" title="cpp/language/as operator" class="mw-redirect"> Copy assignment</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="move_operator.html" title="cpp/language/move operator" class="mw-redirect"> Move assignment</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="destructor.html" title="cpp/language/destructor"> Destructor</a></td></tr>
</table></div></td></tr>
<tr class="t-nv-h1"><td colspan="5"><a href="templates.html" title="cpp/language/templates"> Templates</a> </td></tr>
<tr class="t-nv-col-table"><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="class_template.html" title="cpp/language/class template"> Class template </a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="function_template.html" title="cpp/language/function template"> Function template </a></td></tr>
</table></div></td><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="template_specialization.html" title="cpp/language/template specialization"> Template specialization</a></td></tr>   
<tr class="t-nv"><td colspan="5"> <a href="parameter_pack.html" title="cpp/language/parameter pack"> Parameter packs</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
</table></div></td></tr>
<tr class="t-nv-h1"><td colspan="5"> Miscellaneous </td></tr>
<tr class="t-nv-col-table"><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="asm.html" title="cpp/language/asm"> Inline assembly</a></td></tr>
</table></div></td><td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="history.html" title="cpp/language/history"> History of C++</a></td></tr>
</table></div></td></tr>
</table></div>
</div><div></div></div></div></div><div class="t-navbar-sep"> </div><div class="t-navbar-head"><a href="expressions.html" title="cpp/language/expressions"> Expressions</a><div class="t-navbar-menu"><div><div style="display:inline-block">
<div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv-h2"><td colspan="5"> General </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="value_category.html" title="cpp/language/value category"> value categories</a> (lvalue, rvalue, xvalue)</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="eval_order.html" title="cpp/language/eval order"> order of evaluation</a> (sequence points)</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="constant_expression.html" title="cpp/language/constant expression"> constant expressions</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="expressions.html#Unevaluated_expressions" title="cpp/language/expressions"> unevaluated expressions</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="expressions.html#Primary_expressions" title="cpp/language/expressions"> primary expressions</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="lambda.html" title="cpp/language/lambda">lambda-expression</a><span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
<tr class="t-nv-h2"><td colspan="5"> Literals </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="integer_literal.html" title="cpp/language/integer literal">integer literals</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="floating_literal.html" title="cpp/language/floating literal">floating-point literals</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="bool_literal.html" title="cpp/language/bool literal">boolean literals</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="character_literal.html" title="cpp/language/character literal">character literals</a> including <a href="escape.html" title="cpp/language/escape">escape sequences</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="string_literal.html" title="cpp/language/string literal">string literals</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="nullptr.html" title="cpp/language/nullptr">null pointer literal</a><span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
<tr class="t-nv"><td colspan="5"> <strong class="selflink">user-defined literal</strong><span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
<tr class="t-nv-h2"><td colspan="5"> Operators </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_assignment.html" title="cpp/language/operator assignment"> Assignment operators</a>: 
<code>a=b</code>, <code>a+=b</code>, <code>a-=b</code>, <code>a*=b</code>, <code>a/=b</code>, <code>a%=b</code>, <code>a&amp;=b</code>, <code>a|=b</code>, <code>a^=b</code>, <code>a&lt;&lt;=b</code>, <code>a&gt;&gt;=b</code></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_incdec.html" title="cpp/language/operator incdec"> Increment and decrement</a>: <code>++a</code>, <code>--a</code>, <code>a++</code>, <code>a--</code></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_arithmetic.html" title="cpp/language/operator arithmetic"> Arithmetic operators</a>:
<code>+a</code>, <code>-a</code>, <code>a+b</code>, <code>a-b</code>, <code>a*b</code>, <code>a/b</code>, <code>a%b</code>, <code>~a</code>, <code>a&amp;b</code>, <code>a|b</code>, <code>a^b</code>, <code>a&lt;&lt;b</code>, <code>a&gt;&gt;b</code> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_logical.html" title="cpp/language/operator logical"> Logical operators</a>: <code>a||b</code>, <code>a&amp;&amp;b</code>, <code>!a</code></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_comparison.html" title="cpp/language/operator comparison"> Comparison operators</a>: <code>a==b</code>, <code>a!=b</code>, <code>a&lt;b</code>, <code>a&gt;b</code>, <code>a&lt;=b</code>, <code>a&gt;=b</code>, <code>a&lt;=&gt;b</code><span class="t-mark-rev t-since-cxx20">(C++20)</span></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_member_access.html" title="cpp/language/operator member access"> Member access operators</a>: <code>a[b]</code>, <code>*a</code>, <code>&amp;a</code>, <code>a-&gt;b</code>, <code>a.b</code>, <code>a-&gt;*b</code>, <code>a.*b</code></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_other.html" title="cpp/language/operator other"> Other operators</a>: <code>a(...)</code>, <code>a,b</code>, <code>a?b:c</code> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="new.html" title="cpp/language/new">new-expression</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="delete.html" title="cpp/language/delete">delete-expression</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="throw.html" title="cpp/language/throw">throw-expression</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="alignof.html" title="cpp/language/alignof"><code>alignof</code></a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="sizeof.html" title="cpp/language/sizeof"><code>sizeof</code></a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="sizeof....html" title="cpp/language/sizeof..."><code>sizeof...</code></a><span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="typeid.html" title="cpp/language/typeid"><code>typeid</code></a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="noexcept.html" title="cpp/language/noexcept"><code>noexcept</code></a><span class="t-mark-rev t-since-cxx11">(C++11)</span></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="fold.html" title="cpp/language/fold">Fold expression</a><span class="t-mark-rev t-since-cxx17">(C++17)</span></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_alternative.html" title="cpp/language/operator alternative">Alternative representations of operators</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_precedence.html" title="cpp/language/operator precedence">Precedence and associativity</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operators.html" title="cpp/language/operators">Operator overloading</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="default_comparisons.html" title="cpp/language/default comparisons">Default comparisons</a><span class="t-mark-rev t-since-cxx20">(C++20)</span></td></tr>
<tr class="t-nv-h2"><td colspan="5"> Conversions </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="implicit_cast.html" title="cpp/language/implicit conversion">Implicit conversions</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="const_cast.html" title="cpp/language/const cast"><code>const_cast</code></a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="static_cast.html" title="cpp/language/static cast"><code>static_cast</code></a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="reinterpret_cast.html" title="cpp/language/reinterpret cast"><code>reinterpret_cast</code></a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="dynamic_cast.html" title="cpp/language/dynamic cast"><code>dynamic_cast</code></a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="explicit_cast.html" title="cpp/language/explicit cast">Explicit conversions</a> <code>(T)a</code>, <code>T(a)</code></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="cast_operator.html" title="cpp/language/cast operator">User-defined conversion</a></td></tr>
</table></div>
</div><div></div></div></div></div><div class="t-navbar-sep"> </div></div>
<p>Allows integer, floating-point, character, and string literals to produce objects of user-defined type by defining a user-defined suffix.
</p>
<h3><span class="mw-headline" id="Syntax">Syntax</span></h3>
<p>A user-defined literal is an expression of any of the following forms
</p>
<table class="t-sdsc-begin">

<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <span class="t-spar">decimal-literal</span> <span class="t-spar">ud-suffix</span>
</td>
<td> (1)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <span class="t-spar">octal-literal</span> <span class="t-spar">ud-suffix</span>
</td>
<td> (2)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <span class="t-spar">hex-literal</span> <span class="t-spar">ud-suffix</span>
</td>
<td> (3)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <span class="t-spar">binary-literal</span> <span class="t-spar">ud-suffix</span>
</td>
<td> (4)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <span class="t-spar">fractional-constant</span> <span class="t-spar">exponent-part</span><span class="t-mark">(optional)</span> <span class="t-spar">ud-suffix</span>
</td>
<td> (5)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <span class="t-spar">digit-sequence</span> <span class="t-spar">exponent-part</span> <span class="t-spar">ud-suffix</span>
</td>
<td> (6)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <span class="t-spar">character-literal</span> <span class="t-spar">ud-suffix</span>
</td>
<td> (7)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <span class="t-spar">string-literal</span> <span class="t-spar">ud-suffix</span>
</td>
<td> (8)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr></table>
<div class="t-li1"><span class="t-li">1-4)</span> user-defined integer literals, such as <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">12</span>_km</span></span></div>
<div class="t-li1"><span class="t-li">5-6)</span> user-defined floating-point literals, such as <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu16">0.5</span>_Pa</span></span></div>
<div class="t-li1"><span class="t-li">7)</span> user-defined character literal, such as <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="st0">'c'</span>_X</span></span></div>
<div class="t-li1"><span class="t-li">8)</span> user-defined string literal, such as <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="st0">"abd"</span>_L</span></span> or <span class="t-c"><span class="mw-geshi cpp source-cpp">u<span class="st0">"xyz"</span>_M</span></span></div>
<table class="t-par-begin">


<tr class="t-par">
<td> <span class="t-spar">decimal-literal</span>
</td>
<td> -
</td>
<td> same as in <a href="integer_literal.html" title="cpp/language/integer literal">integer literal</a>, a non-zero decimal digit followed by zero or more decimal digits
</td></tr>
<tr class="t-par">
<td> <span class="t-spar">octal-literal</span>
</td>
<td> -
</td>
<td> same as in <a href="integer_literal.html" title="cpp/language/integer literal">integer literal</a>, a zero followed by zero or more octal digits
</td></tr>
<tr class="t-par">
<td> <span class="t-spar">hex-literal</span>
</td>
<td> -
</td>
<td> same as in <a href="integer_literal.html" title="cpp/language/integer literal">integer literal</a>, <code>0x</code> or <code>0X</code> followed by one or more hexadecimal digits
</td></tr>
<tr class="t-par">
<td> <span class="t-spar">binary-literal</span>
</td>
<td> -
</td>
<td> same as in <a href="integer_literal.html" title="cpp/language/integer literal">integer literal</a>, <code>0b</code> or <code>0B</code> followed by one or more binary digits
</td></tr>
<tr class="t-par">
<td> <span class="t-spar">digit-sequence</span>
</td>
<td> -
</td>
<td> same as in <a href="floating_literal.html" title="cpp/language/floating literal">floating literal</a>, a sequence of decimal digits
</td></tr>
<tr class="t-par">
<td> <span class="t-spar">fractional-constant</span>
</td>
<td> -
</td>
<td> same as in <a href="floating_literal.html" title="cpp/language/floating literal">floating literal</a>, either a <span class="t-spar">digit-sequence</span> followed by a dot (<span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">123</span>.</span></span>) or an optional <span class="t-spar">digit-sequence</span> followed by a dot and another <span class="t-spar">digit-sequence</span> (<span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu16">1.0</span></span></span> or <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu18">.12</span></span></span>)
</td></tr>
<tr class="t-par">
<td> <span class="t-spar">exponent-part</span>
</td>
<td> -
</td>
<td> same as in <a href="floating_literal.html" title="cpp/language/floating literal">floating literal</a>, the letter <code>e</code> or the letter <code>E</code> followed by optional sign, followed by <span class="t-spar">digit-sequence</span>
</td></tr>
<tr class="t-par">
<td> <span class="t-spar">character-literal</span>
</td>
<td> -
</td>
<td> same as in <a href="character_literal.html" title="cpp/language/character literal">character literal</a>
</td></tr>
<tr class="t-par">
<td> <span class="t-spar">string-literal</span>
</td>
<td> -
</td>
<td> same as in <a href="string_literal.html" title="cpp/language/string literal">string literal</a>, including raw string literals
</td></tr>
<tr class="t-par">
<td> <span class="t-spar">ud-suffix</span>
</td>
<td> -
</td>
<td> an identifier, introduced by a <i>literal operator</i> or a <i>literal operator template</i> declaration (see below). All <span class="t-spar">ud-suffix</span>es introduced by a program must begin with the underscore character <code><b>_</b></code>. The standard library <span class="t-spar">ud-suffix</span>es do not begin with underscores.
</td></tr></table>
 <table class="t-rev-begin">
<tr class="t-rev t-since-cxx14"><td>
<p>In the integer and floating-point digit sequences, optional separators <code><b>'</b></code> are allowed between any two digits and are ignored.
</p>
</td>
<td><span class="t-mark-rev t-since-cxx14">(since C++14)</span></td></tr>
</table>
<p>If a token matches a user-defined literal syntax and a regular literal syntax, it is assumed to be a regular literal (that is, it's impossible to overload <span class="t-c"><span class="mw-geshi cpp source-cpp">LL</span></span> in <span class="t-c"><span class="mw-geshi cpp source-cpp">123LL</span></span>)
</p><p>When the compiler encounters a user-defined literal with <span class="t-spar">ud-suffix</span> <code>X</code>, it performs <a href="lookup.html#Unqualified_name_lookup" title="cpp/language/lookup">unqualified name lookup</a>, looking for a function with the name <code>operator "" X</code>. If the lookup does not find a declaration, the program is ill-formed. Otherwise,
</p>
<div class="t-li1"><span class="t-li">1)</span> For user-defined integer literals</div>
<div class="t-li2"><span class="t-li">a)</span> if the overload set includes a literal operator with the parameter type <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">unsigned</span> <span class="kw4">long</span> <span class="kw4">long</span></span></span>, the user-defined literal expression is treated as a function call <span class="t-c"><span class="mw-geshi cpp source-cpp">operator <span class="st0">""</span> X<span class="br0">(</span>nULL<span class="br0">)</span></span></span>, where n is the literal without <span class="t-spar">ud-suffix</span></div>
<div class="t-li2"><span class="t-li">b)</span> otherwise, the overload set must include either, but not both, a raw literal operator or a numeric literal operator template. If the overload set includes a raw literal operator, the user-defined literal expression is treated as a function call <span class="t-c"><span class="mw-geshi cpp source-cpp">operator <span class="st0">""</span> X<span class="br0">(</span><span class="st0">"n"</span><span class="br0">)</span></span></span></div>
<div class="t-li2"><span class="t-li">c)</span> otherwise, if the overload set includes a numeric literal operator template, the user-defined literal expression is treated as a function call <span class="t-c"><span class="mw-geshi cpp source-cpp">operator <span class="st0">""</span> X<span class="sy1">&lt;</span><span class="st0">'c1'</span>, <span class="st0">'c2'</span>, <span class="st0">'c3'</span>..., <span class="st0">'ck'</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span></span></span>, where c1..ck are the individual characters of <code>n</code> and all of them are from the <span class="t-rev-inl t-until-cxx23"><span><a href="charset.html#Basic_source_character_set" title="cpp/language/charset">basic source character set</a></span> <span><span class="t-mark-rev t-until-cxx23">(until C++23)</span></span></span><span class="t-rev-inl t-since-cxx23"><span><a href="charset.html#Basic_character_set" title="cpp/language/charset">basic character set</a></span> <span><span class="t-mark-rev t-since-cxx23">(since C++23)</span></span></span>.</div>
<div class="t-li1"><span class="t-li">2)</span> For user-defined floating-point literals,</div>
<div class="t-li2"><span class="t-li">a)</span> If the overload set includes a literal operator with the parameter type <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">long</span> <span class="kw4">double</span></span></span>, the user-defined literal expression is treated as a function call <span class="t-c"><span class="mw-geshi cpp source-cpp">operator <span class="st0">""</span> X<span class="br0">(</span>fL<span class="br0">)</span></span></span>, where <code>f</code> is the literal without <span class="t-spar">ud-suffix</span></div>
<div class="t-li2"><span class="t-li">b)</span> otherwise, the overload set must include either, but not both, a raw literal operator or a numeric literal operator template. If the overload set includes a raw literal operator, the user-defined literal expression is treated as a function call <span class="t-c"><span class="mw-geshi cpp source-cpp">operator <span class="st0">""</span> X<span class="br0">(</span><span class="st0">"f"</span><span class="br0">)</span></span></span></div>
<div class="t-li2"><span class="t-li">c)</span> otherwise, if the overload set includes a numeric literal operator template, the user-defined literal expression is treated as a function call <span class="t-c"><span class="mw-geshi cpp source-cpp">operator <span class="st0">""</span> X<span class="sy1">&lt;</span><span class="st0">'c1'</span>, <span class="st0">'c2'</span>, <span class="st0">'c3'</span>..., <span class="st0">'ck'</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span></span></span>, where c1..ck are the individual characters of <code>f</code> and all of them are from the <span class="t-rev-inl t-until-cxx23"><span><a href="charset.html#Basic_source_character_set" title="cpp/language/charset">basic source character set</a></span> <span><span class="t-mark-rev t-until-cxx23">(until C++23)</span></span></span><span class="t-rev-inl t-since-cxx23"><span><a href="charset.html#Basic_character_set" title="cpp/language/charset">basic character set</a></span> <span><span class="t-mark-rev t-since-cxx23">(since C++23)</span></span></span>.</div>
<div class="t-li1"><span class="t-li">3)</span> For user-defined string literals, let <code>str</code> be the literal without <span class="t-spar">ud-suffix</span>:</div>
 <table class="t-rev-begin">
<tr class="t-rev t-since-cxx20"><td>
<div class="t-li2"><span class="t-li">a)</span> If the overload set includes a string literal operator template with a non-type template parameter for which <code>str</code> is a well-formed template argument, then the user-defined literal expression is treated as a function call <span class="t-c"><span class="mw-geshi cpp source-cpp">operator <span class="st0">""</span> X<span class="sy1">&lt;</span>str<span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span></span></span>,
</div></td>
<td><span class="t-mark-rev t-since-cxx20">(since C++20)</span></td></tr>
</table>
<div class="t-li2"><span class="t-li">b)</span> otherwise, the user-defined literal expression is treated as a function call <span class="t-c"><span class="mw-geshi cpp source-cpp">operator <span class="st0">""</span> X <span class="br0">(</span>str, len<span class="br0">)</span></span></span>, where <code>len</code> is the length of the string literal, excluding the terminating null character</div>
<div class="t-li1"><span class="t-li">4)</span> For user-defined character literals, the user-defined literal expression is treated as a function call <span class="t-c"><span class="mw-geshi cpp source-cpp">operator <span class="st0">""</span> X<span class="br0">(</span>ch<span class="br0">)</span></span></span>, where <code>ch</code> is the literal without <span class="t-spar">ud-suffix</span></div>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="cpp source-cpp"><pre class="de1"><span class="kw4">long</span> <span class="kw4">double</span> operator <span class="st0">""</span> _w<span class="br0">(</span><span class="kw4">long</span> <span class="kw4">double</span><span class="br0">)</span><span class="sy4">;</span>
<a href="../string/basic_string.html"><span class="kw1233">std::<span class="me2">string</span></span></a> operator <span class="st0">""</span> _w<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char16_t</span><span class="sy2">*</span>, size_t<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">unsigned</span>    operator <span class="st0">""</span> _w<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span><span class="br0">)</span><span class="sy4">;</span>
 
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
    <span class="nu16">1.2</span>_w<span class="sy4">;</span>    <span class="co1">// calls operator "" _w(1.2L)</span>
    u<span class="st0">"one"</span>_w<span class="sy4">;</span> <span class="co1">// calls operator "" _w(u"one", 3)</span>
    <span class="nu0">12</span>_w<span class="sy4">;</span>     <span class="co1">// calls operator "" _w("12")</span>
    <span class="st0">"two"</span>_w<span class="sy4">;</span>  <span class="co1">// error: no applicable literal operator</span>
<span class="br0">}</span></pre></div></div>
<p>When string literal concatenation takes place in <a href="translation_phases.html#Phase_6" title="cpp/language/translation phases">translation phase 6</a>, user-defined string literals are concatenated as well, and their <span class="t-spar">ud-suffix</span>es are ignored for the purpose of concatenation, except that only one suffix may appear on all concatenated literals:
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="cpp source-cpp"><pre class="de1"><span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
    L<span class="st0">"A"</span> <span class="st0">"B"</span> <span class="st0">"C"</span>_x<span class="sy4">;</span>  <span class="co1">// OK: same as L"ABC"_x</span>
    <span class="st0">"P"</span>_x <span class="st0">"Q"</span> <span class="st0">"R"</span>_y<span class="sy4">;</span> <span class="co1">// error: two different ud-suffixes (_x and _y)</span>
<span class="br0">}</span></pre></div></div>
<h3><span class="mw-headline" id="Literal_operators">Literal operators</span></h3>
<p>The function called by a user-defined literal is known as <i>literal operator</i> (or, if it's a template, <i>literal operator template</i>). It is declared just like any other <a href="function.html" title="cpp/language/function">function</a> or <a href="function_template.html" title="cpp/language/function template">function template</a> at namespace scope (it may also be a friend function, an explicit instantiation or specialization of a function template, or introduced by a using-declaration), except for the following restrictions:
</p><p>The name of this function can have one of the two forms:
</p>
<table class="t-sdsc-begin">

<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td class="t-sdsc-nopad"> <code><b>operator</b></code> <code><b>""</b></code> <span class="t-spar">identifier</span>
</td>
<td class="t-sdsc-nopad">
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td class="t-sdsc-nopad"> <code><b>operator</b></code> <span class="t-spar">user-defined-string-literal</span>
</td>
<td class="t-sdsc-nopad">
</td>
<td class="t-sdsc-nopad">
</td></tr>

 

<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr></table>
<table class="t-par-begin">


<tr class="t-par">
<td> <span class="t-spar">identifier</span>
</td>
<td> -
</td>
<td> the identifier to use as the <span class="t-spar">ud-suffix</span> for the user-defined literals that will call this function. Must begin with the underscore <code><b>_</b></code>: the suffixes that do not begin with the underscore are reserved for the literal operators provided by the standard library.
</td></tr>
<tr class="t-par">
<td> <span class="t-spar">user-defined-string-literal</span>
</td>
<td> -
</td>
<td> the character sequence <code><b>""</b></code> followed, without a space, by the character sequence that becomes the <span class="t-spar">ud-suffix</span>. This special syntax makes it possible to use language keywords and <a href="../keywords.html" title="cpp/keywords" class="mw-redirect">reserved identifiers</a> as ud-suffixes, and is used by the declaration of <span class="t-c"><span class="mw-geshi cpp source-cpp">operator <span class="st0">""</span><span class="kw1">if</span></span></span> from the header <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">&lt;</span>complex<span class="sy1">&gt;</span></span></span>. Note that using this form does not change the rules that user-defined literal operators must begin with an underscore: declarations such as <span class="t-c"><span class="mw-geshi cpp source-cpp">operator <span class="st0">""</span><span class="kw1">if</span></span></span> may only appear as part of a standard library header. However, it allows the use of an underscore followed by a capital letter (which is otherwise a <a href="name.html" title="cpp/language/identifiers">reserved identifier</a>)
</td></tr></table>
<p>If the literal operator is a template, it must have an empty parameter list and can have only one template parameter, which must be a non-type template parameter pack with element type <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char</span></span></span> (in which case it is known as a <i>numeric literal operator template</i>)
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="cpp source-cpp"><pre class="de1"><span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw4">char</span>...<span class="sy1">&gt;</span>
<span class="kw4">double</span> operator <span class="st0">""</span> _x<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span></pre></div></div>
 <table class="t-rev-begin">
<tr class="t-rev t-since-cxx20"><td>
<p>or a non-type template parameter of class type (in which case it is known as a <i>string literal operator template</i>)
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="cpp source-cpp"><pre class="de1"><span class="kw1">struct</span> A <span class="br0">{</span> <span class="kw4">constexpr</span> A<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span> <span class="sy2">*</span><span class="br0">)</span><span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
 
<span class="kw1">template</span><span class="sy1">&lt;</span>A a<span class="sy1">&gt;</span>
A operator <span class="st0">""</span>_a<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span></pre></div></div>
</td>
<td><span class="t-mark-rev t-since-cxx20">(since C++20)</span></td></tr>
</table>
<p>Only the following parameter lists are allowed on literal operators:
</p>
<table class="t-sdsc-begin">

<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <code><b>(</b></code> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">const</span> <span class="kw4">char</span> <span class="sy2">*</span></span></span> <code><b>)</b></code>
</td>
<td> (1)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <code><b>(</b></code> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">unsigned</span> <span class="kw4">long</span> <span class="kw4">long</span> <span class="kw4">int</span></span></span> <code><b>)</b></code>
</td>
<td> (2)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <code><b>(</b></code> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">long</span> <span class="kw4">double</span></span></span> <code><b>)</b></code>
</td>
<td> (3)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <code><b>(</b></code> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char</span></span></span> <code><b>)</b></code>
</td>
<td> (4)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <code><b>(</b></code> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">wchar_t</span></span></span> <code><b>)</b></code>
</td>
<td> (5)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <code><b>(</b></code> <span class="t-c"><span class="mw-geshi cpp source-cpp">char8_t</span></span> <code><b>)</b></code>
</td>
<td> (6)
</td>
<td> <span class="t-mark-rev t-since-cxx20">(since C++20)</span>
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <code><b>(</b></code> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char16_t</span></span></span> <code><b>)</b></code>
</td>
<td> (7)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <code><b>(</b></code> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char32_t</span></span></span> <code><b>)</b></code>
</td>
<td> (8)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <code><b>(</b></code> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">const</span> <span class="kw4">char</span> <span class="sy2">*</span></span></span> <code><b>,</b></code> <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="../types/size_t.html"><span class="kw106">std::<span class="me2">size_t</span></span></a></span></span> <code><b>)</b></code>
</td>
<td> (9)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <code><b>(</b></code> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">const</span> <span class="kw4">wchar_t</span> <span class="sy2">*</span></span></span> <code><b>,</b></code> <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="../types/size_t.html"><span class="kw106">std::<span class="me2">size_t</span></span></a></span></span> <code><b>)</b></code>
</td>
<td> (10)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <code><b>(</b></code> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">const</span> char8_t <span class="sy2">*</span></span></span> <code><b>,</b></code> <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="../types/size_t.html"><span class="kw106">std::<span class="me2">size_t</span></span></a></span></span> <code><b>)</b></code>
</td>
<td> (11)
</td>
<td> <span class="t-mark-rev t-since-cxx20">(since C++20)</span>
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <code><b>(</b></code> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">const</span> <span class="kw4">char16_t</span> <span class="sy2">*</span></span></span> <code><b>,</b></code> <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="../types/size_t.html"><span class="kw106">std::<span class="me2">size_t</span></span></a></span></span> <code><b>)</b></code>
</td>
<td> (12)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <code><b>(</b></code> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">const</span> <span class="kw4">char32_t</span> <span class="sy2">*</span></span></span> <code><b>,</b></code> <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="../types/size_t.html"><span class="kw106">std::<span class="me2">size_t</span></span></a></span></span> <code><b>)</b></code>
</td>
<td> (13)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr></table>
<div class="t-li1"><span class="t-li">1)</span> Literal operators with this parameter list are the <i>raw literal operators</i>, used as fallbacks for integer and floating-point user-defined literals (see above)</div>
<div class="t-li1"><span class="t-li">2)</span> Literal operators with these parameter lists are the first-choice literal operator for user-defined integer literals</div>
<div class="t-li1"><span class="t-li">3)</span> Literal operators with these parameter lists are the first-choice literal operator for user-defined floating-point literals</div>
<div class="t-li1"><span class="t-li">4-8)</span> Literal operators with these parameter lists are called by user-defined character literals</div>
<div class="t-li1"><span class="t-li">9-13)</span> Literal operators with these parameter lists are called by user-defined string literals</div>
<p><a href="default_arguments.html" title="cpp/language/default arguments">Default arguments</a> are not allowed.
</p><p>C <a href="language_linkage.html" title="cpp/language/language linkage">language linkage</a> is not allowed.
</p><p>Other than the restrictions above, literal operators and literal operator templates are normal functions (and function templates), they can be declared inline or constexpr, they may have internal or external linkage, they can be called explicitly, their addresses can be taken, etc.
</p>
<div class="t-example"><div class="t-example-live-link"><div class="coliru-btn coliru-btn-run-init">Run this code</div></div>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="cpp source-cpp"><pre class="de1"><span class="co2">#include &lt;string&gt;</span>
 
<span class="kw4">void</span>        operator <span class="st0">""</span> _km<span class="br0">(</span><span class="kw4">long</span> <span class="kw4">double</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK, will be called for 1.0_km</span>
<a href="../string/basic_string.html"><span class="kw1233">std::<span class="me2">string</span></span></a> operator <span class="st0">""</span> _i18n<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span>, <a href="../types/size_t.html"><span class="kw106">std::<span class="me2">size_t</span></span></a><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK</span>
 
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw4">char</span>...<span class="sy1">&gt;</span>
<span class="kw4">double</span> operator <span class="st0">""</span> _π<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK</span>
<span class="kw4">float</span>  operator <span class="st0">""</span>_e<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK</span>
 
<span class="co1">// error: suffix must begin with underscore</span>
<span class="kw4">float</span> operator <span class="st0">""</span>Z<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span><span class="br0">)</span><span class="sy4">;</span>
 
<span class="co1">// error: all names that begin with underscore followed by uppercase</span>
<span class="co1">// letter are reserved (NOTE: a space between "" and _).</span>
<span class="kw4">double</span> operator<span class="st0">""</span> _Z<span class="br0">(</span><span class="kw4">long</span> <span class="kw4">double</span><span class="br0">)</span><span class="sy4">;</span>
 
<span class="co1">// OK. NOTE: no space between "" and _.</span>
<span class="kw4">double</span> operator<span class="st0">""</span>_Z<span class="br0">(</span><span class="kw4">long</span> <span class="kw4">double</span><span class="br0">)</span><span class="sy4">;</span>
 
<span class="co1">// OK: literal operators can be overloaded</span>
<span class="kw4">double</span> operator <span class="st0">""</span>_Z<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span> args<span class="br0">)</span><span class="sy4">;</span>
 
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span></pre></div></div>
</div>
<h3><span class="mw-headline" id="Notes">Notes</span></h3>
<p>Since the introduction of user-defined literals, the code that uses <a href="../../c/types/integer.html" title="c/types/integer">format macro constants for fixed-width integer types</a> with no space after the preceding string literal became invalid: <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="../io/c/fprintf.html"><span class="kw1849">std::<span class="me2">printf</span></span></a><span class="br0">(</span><span class="st0">"%"</span><a href="../types/integer.html"><span class="kw185">PRId64</span></a><span class="st0">"<span class="es1">\n</span>"</span>,<a href="../types/integer.html"><span class="kw143">INT64_MIN</span></a><span class="br0">)</span><span class="sy4">;</span></span></span> has to be replaced by <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="../io/c/fprintf.html"><span class="kw1849">std::<span class="me2">printf</span></span></a><span class="br0">(</span><span class="st0">"%"</span> <a href="../types/integer.html"><span class="kw185">PRId64</span></a><span class="st0">"<span class="es1">\n</span>"</span>,<a href="../types/integer.html"><span class="kw143">INT64_MIN</span></a><span class="br0">)</span><span class="sy4">;</span></span></span>
</p><p>Due to <a href="translation_phases.html#maximal_munch" title="cpp/language/translation phases">maximal munch</a>, user-defined integer and floating point literals ending in <span class="t-rev-inl t-since-cxx17"><span><code>p</code>, <code>P</code>,</span> <span><span class="t-mark-rev t-since-cxx17">(since C++17)</span></span></span> <code>e</code> and <code>E</code>, when followed by the operators <code>+</code> or <code>-</code>, must be separated from the operator with whitespace or parentheses in the source:
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="cpp source-cpp"><pre class="de1"><span class="kw4">long</span> <span class="kw4">double</span> operator<span class="st0">""</span>_E<span class="br0">(</span><span class="kw4">long</span> <span class="kw4">double</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">long</span> <span class="kw4">double</span> operator<span class="st0">""</span>_a<span class="br0">(</span><span class="kw4">long</span> <span class="kw4">double</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">int</span> operator<span class="st0">""</span>_p<span class="br0">(</span><span class="kw4">unsigned</span> <span class="kw4">long</span> <span class="kw4">long</span><span class="br0">)</span><span class="sy4">;</span>
 
<span class="kw4">auto</span> x <span class="sy1">=</span> <span class="nu16">1.0</span>_E<span class="sy2">+</span><span class="nu16">2.0</span><span class="sy4">;</span>   <span class="co1">// error</span>
<span class="kw4">auto</span> y <span class="sy1">=</span> <span class="nu16">1.0</span>_a<span class="sy2">+</span><span class="nu16">2.0</span><span class="sy4">;</span>   <span class="co1">// OK</span>
<span class="kw4">auto</span> z <span class="sy1">=</span> <span class="nu16">1.0</span>_E <span class="sy2">+</span><span class="nu16">2.0</span><span class="sy4">;</span>  <span class="co1">// OK</span>
<span class="kw4">auto</span> q <span class="sy1">=</span> <span class="br0">(</span><span class="nu16">1.0</span>_E<span class="br0">)</span><span class="sy2">+</span><span class="nu16">2.0</span><span class="sy4">;</span> <span class="co1">// OK</span>
<span class="kw4">auto</span> w <span class="sy1">=</span> <span class="nu0">1</span>_p<span class="sy2">+</span><span class="nu0">2</span><span class="sy4">;</span>       <span class="co1">// error</span>
<span class="kw4">auto</span> u <span class="sy1">=</span> <span class="nu0">1</span>_p <span class="sy2">+</span><span class="nu0">2</span><span class="sy4">;</span>      <span class="co1">// OK</span></pre></div></div>
<p>Same applies to dot operator following an integer or floating-point user-defined literal:
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="cpp source-cpp"><pre class="de1"><span class="co2">#include &lt;chrono&gt;</span>
 
<span class="kw1">using</span> <span class="kw1">namespace</span> std<span class="sy4">::</span><span class="me2">literals</span><span class="sy4">;</span>
 
<span class="kw4">auto</span> a <span class="sy1">=</span> 4s.<span class="me1">count</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>   <span class="co1">// Error</span>
<span class="kw4">auto</span> b <span class="sy1">=</span> 4s .<span class="me1">count</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>  <span class="co1">// OK</span>
<span class="kw4">auto</span> c <span class="sy1">=</span> <span class="br0">(</span>4s<span class="br0">)</span>.<span class="me1">count</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK</span></pre></div></div>
<p>Otherwise, a single invalid preprocessing number token (e.g., <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu16">1.0</span>_E<span class="sy2">+</span><span class="nu16">2.0</span></span></span> or <span class="t-c"><span class="mw-geshi cpp source-cpp">4s.<span class="me1">count</span></span></span>) is formed, which causes compilation to fail.
</p>
<h3><span class="mw-headline" id="Examples">Examples</span></h3>
<div class="t-example"><div class="t-example-live-link"><div class="coliru-btn coliru-btn-run-init">Run this code</div></div>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="cpp source-cpp"><pre class="de1"><span class="co2">#include &lt;cstddef&gt;</span>
<span class="co2">#include &lt;algorithm&gt;</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;numbers&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
 
<span class="co1">// used as conversion from degrees (input param) to radians (returned output)</span>
<span class="kw4">constexpr</span> <span class="kw4">long</span> <span class="kw4">double</span> operator<span class="st0">""</span> _deg_to_rad<span class="br0">(</span><span class="kw4">long</span> <span class="kw4">double</span> deg<span class="br0">)</span>
<span class="br0">{</span>
    <span class="kw4">long</span> <span class="kw4">double</span> radians <span class="sy1">=</span> deg <span class="sy2">*</span> <a href="../numeric/constants.html"><span class="kw3331">std::<span class="me2">numbers</span><span class="sy4">::</span><span class="me2">pi_v</span></span></a><span class="sy1">&lt;</span><span class="kw4">long</span> <span class="kw4">double</span><span class="sy1">&gt;</span> <span class="sy2">/</span> <span class="nu0">180</span><span class="sy4">;</span>
    <span class="kw1">return</span> radians<span class="sy4">;</span>
<span class="br0">}</span>
 
<span class="co1">// used with custom type</span>
<span class="kw1">struct</span> mytype
<span class="br0">{</span>
    <span class="kw4">unsigned</span> <span class="kw4">long</span> <span class="kw4">long</span> m<span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> mytype operator<span class="st0">""</span> _mytype<span class="br0">(</span><span class="kw4">unsigned</span> <span class="kw4">long</span> <span class="kw4">long</span> n<span class="br0">)</span>
<span class="br0">{</span>
    <span class="kw1">return</span> mytype<span class="br0">{</span>n<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span>
 
<span class="co1">// used for side-effects</span>
<span class="kw4">void</span> operator<span class="st0">""</span> _print<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span> str<span class="br0">)</span>
<span class="br0">{</span>
    <a href="../io/cout.html"><span class="kw1762">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> str <span class="sy1">&lt;&lt;</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span>
<span class="br0">}</span>
 
<span class="co2">#if __cpp_nontype_template_args &lt; 201911</span>
 
<a href="../string/basic_string.html"><span class="kw1233">std::<span class="me2">string</span></span></a> operator<span class="st0">""</span> _x2 <span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span> str, <a href="../types/size_t.html"><span class="kw106">std::<span class="me2">size_t</span></span></a><span class="br0">)</span>
<span class="br0">{</span>
    <span class="kw1">return</span> <a href="../string/basic_string.html"><span class="kw1233">std::<span class="me2">string</span></span></a><span class="br0">{</span>str<span class="br0">}</span> <span class="sy2">+</span> str<span class="sy4">;</span>
<span class="br0">}</span>
 
<span class="co2">#else // C++20 string literal operator template</span>
 
<span class="kw1">template</span><span class="sy1">&lt;</span><a href="../types/size_t.html"><span class="kw106">std::<span class="me2">size_t</span></span></a> N<span class="sy1">&gt;</span>
<span class="kw1">struct</span> DoubleString
<span class="br0">{</span>
    <span class="kw4">char</span> p<span class="br0">[</span>N<span class="sy2">*</span><span class="nu0">2</span><span class="sy2">-</span><span class="nu0">1</span><span class="br0">]</span><span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
 
    <span class="kw4">constexpr</span> DoubleString<span class="br0">(</span><span class="kw4">char</span> <span class="kw4">const</span><span class="br0">(</span><span class="sy3">&amp;</span>pp<span class="br0">)</span><span class="br0">[</span>N<span class="br0">]</span><span class="br0">)</span>
    <span class="br0">{</span>
        std<span class="sy4">::</span><a href="../algorithm/ranges/copy.html"><span class="kw2853">ranges::<span class="me2">copy</span></span></a><span class="br0">(</span>pp, p<span class="br0">)</span><span class="sy4">;</span>
        std<span class="sy4">::</span><a href="../algorithm/ranges/copy.html"><span class="kw2853">ranges::<span class="me2">copy</span></span></a><span class="br0">(</span>pp, p <span class="sy2">+</span> N <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">)</span><span class="sy4">;</span>
    <span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
 
<span class="kw1">template</span><span class="sy1">&lt;</span>DoubleString A<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> <span class="kw4">auto</span> operator<span class="st0">""</span> _x2<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
    <span class="kw1">return</span> A.<span class="me1">p</span><span class="sy4">;</span>
<span class="br0">}</span>
 
<span class="co2">#endif // C++20</span>
 
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
    <span class="kw4">double</span> x_rad <span class="sy1">=</span> <span class="nu16">90.0</span>_deg_to_rad<span class="sy4">;</span>
    <a href="../io/cout.html"><span class="kw1762">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <a href="../io/manip/fixed.html"><span class="kw1788">std::<span class="me2">fixed</span></span></a> <span class="sy1">&lt;&lt;</span> x_rad <span class="sy1">&lt;&lt;</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span>
 
    mytype y <span class="sy1">=</span> <span class="nu0">123</span>_mytype<span class="sy4">;</span>
    <a href="../io/cout.html"><span class="kw1762">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> y.<span class="me1">m</span> <span class="sy1">&lt;&lt;</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span>
 
    <span class="nu12">0x123ABC</span>_print<span class="sy4">;</span>
    <a href="../io/cout.html"><span class="kw1762">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <span class="st0">"abc"</span>_x2 <span class="sy1">&lt;&lt;</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div></div>
<p>Output:
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="text source-text"><pre class="de1">1.570796
123
0x123ABC
abcabc</pre></div></div> 
</div>
<h3><span class="mw-headline" id="Standard_library">Standard library</span></h3>
<p>The following literal operators are defined in the standard library:
</p>
<table class="t-dsc-begin">

<tr class="t-dsc-header">
<td colspan="2"> <div>Defined in inline namespace <code>std::literals::complex_literals</code> </div>
</td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="../numeric/complex/operator_q__q_i.html" title='cpp/numeric/complex/operator""i'> <span class="t-lines"><span>operator""if</span><span>operator""i</span><span>operator""il</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx14">(C++14)</span></span></span></div></div>
</td>
<td>   A <span class="t-lc"><a href="../numeric/complex.html" title="cpp/numeric/complex">std::complex</a></span> literal representing pure imaginary number  <br> <span class="t-mark">(function)</span> </td></tr>

<tr class="t-dsc-header">
<td colspan="2"> <div>Defined in inline namespace <code>std::literals::chrono_literals</code> </div>
</td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="../chrono/operator_q__q_h.html" title='cpp/chrono/operator""h'> <span class="t-lines"><span>operator""h</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx14">(C++14)</span></span></span></div></div>
</td>
<td>   A <span class="t-lc"><a href="../chrono/duration.html" title="cpp/chrono/duration">std::chrono::duration</a></span> literal representing hours  <br> <span class="t-mark">(function)</span> </td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="../chrono/operator_q__q_min.html" title='cpp/chrono/operator""min'> <span class="t-lines"><span>operator""min</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx14">(C++14)</span></span></span></div></div>
</td>
<td>   A <span class="t-lc"><a href="../chrono/duration.html" title="cpp/chrono/duration">std::chrono::duration</a></span> literal representing minutes  <br> <span class="t-mark">(function)</span> </td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="../chrono/operator_q__q_s.html" title='cpp/chrono/operator""s'> <span class="t-lines"><span>operator""s</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx14">(C++14)</span></span></span></div></div>
</td>
<td>   A <span class="t-lc"><a href="../chrono/duration.html" title="cpp/chrono/duration">std::chrono::duration</a></span> literal representing seconds  <br> <span class="t-mark">(function)</span> </td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="../chrono/operator_q__q_ms.html" title='cpp/chrono/operator""ms'> <span class="t-lines"><span>operator""ms</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx14">(C++14)</span></span></span></div></div>
</td>
<td>   A <span class="t-lc"><a href="../chrono/duration.html" title="cpp/chrono/duration">std::chrono::duration</a></span> literal representing milliseconds  <br> <span class="t-mark">(function)</span> </td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="../chrono/operator_q__q_us.html" title='cpp/chrono/operator""us'> <span class="t-lines"><span>operator""us</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx14">(C++14)</span></span></span></div></div>
</td>
<td>   A <span class="t-lc"><a href="../chrono/duration.html" title="cpp/chrono/duration">std::chrono::duration</a></span> literal representing microseconds  <br> <span class="t-mark">(function)</span> </td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="../chrono/operator_q__q_ns.html" title='cpp/chrono/operator""ns'> <span class="t-lines"><span>operator""ns</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx14">(C++14)</span></span></span></div></div>
</td>
<td>   A <span class="t-lc"><a href="../chrono/duration.html" title="cpp/chrono/duration">std::chrono::duration</a></span> literal representing nanoseconds  <br> <span class="t-mark">(function)</span> </td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="../chrono/operator_q__q_y.html" title='cpp/chrono/operator""y'> <span class="t-lines"><span>operator""y</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div></div>
</td>
<td>   A <span class="t-lc">std::chrono::year</span> literal representing a particular year  <br> <span class="t-mark">(function)</span> </td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="../chrono/operator_q__q_d.html" title='cpp/chrono/operator""d'> <span class="t-lines"><span>operator""d</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div></div>
</td>
<td>   A <span class="t-lc">std::chrono::day</span> literal representing a day of a month   <br> <span class="t-mark">(function)</span> </td></tr>

<tr class="t-dsc-header">
<td colspan="2"> <div>Defined in inline namespace <code>std::literals::string_literals</code> </div>
</td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="../string/basic_string/operator_q__q_s.html" title='cpp/string/basic string/operator""s'> <span class="t-lines"><span>operator""s</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx14">(C++14)</span></span></span></div></div>
</td>
<td>   Converts a character array literal to <code>basic_string</code>  <br> <span class="t-mark">(function)</span> </td></tr>

<tr class="t-dsc-header">
<td colspan="2"> <div>Defined in inline namespace <code>std::literals::string_view_literals</code> </div>
</td></tr>

<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="../string/basic_string_view/operator_q__q_sv.html" title='cpp/string/basic string view/operator""sv'> <span class="t-lines"><span>operator""sv</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span></span></div></div>
</td>
<td>   Creates a string view of a character array literal  <br> <span class="t-mark">(function)</span> </td></tr>
</table>
<h3><span class="mw-headline" id="Defect_reports">Defect reports</span></h3>
<p>The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
</p>
<table class="dsctable" style="font-size:0.8em">
<tr>
<th> DR
</th>
<th> Applied to
</th>
<th> Behavior as published
</th>
<th> Correct behavior
</th></tr>
<tr>
<td> <a rel="nofollow" class="external text" href="https://cplusplus.github.io/CWG/issues/1473.html">CWG 1473</a>
</td>
<td> C++11
</td>
<td> whitespace between <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="st0">""</span></span></span> and <span class="t-spar">ud-suffix</span> was<br>required in the declaration of literal operators
</td>
<td> made optional
</td></tr>
<tr>
<td> <a rel="nofollow" class="external text" href="https://cplusplus.github.io/CWG/issues/1479.html">CWG 1479</a>
</td>
<td> C++11
</td>
<td> literal operators could have default arguments
</td>
<td> prohibited
</td></tr></table>

<!-- 
NewPP limit report
Preprocessor visited node count: 7689/1000000
Preprocessor generated node count: 13842/1000000
Post‐expand include size: 244338/2097152 bytes
Template argument size: 49537/2097152 bytes
Highest expansion depth: 20/40
Expensive parser function count: 0/100
-->

<!-- Saved in parser cache with key mwiki1-mwiki_en_:pcache:idhash:5061-0!*!0!!en!*!* and timestamp 20220628052250 -->
</div>                    <!-- /bodycontent -->
                                        <!-- printfooter -->
                    <div class="printfooter">
                    Retrieved from "<a href="https://en.cppreference.com/mwiki/index.php?title=cpp/language/user_literal&amp;oldid=139788">https://en.cppreference.com/mwiki/index.php?title=cpp/language/user_literal&amp;oldid=139788</a>"                    </div>
                    <!-- /printfooter -->
                                                            <!-- catlinks -->
                    <!-- /catlinks -->
                                                            <div class="visualClear"></div>
                    <!-- debughtml -->
                                        <!-- /debughtml -->
                </div>
                <!-- /bodyContent -->
            </div>
        </div>
        <!-- /content -->
        <!-- footer -->
        <div id="cpp-footer-base" class="noprint">
            <div id="footer">
                        <div id="cpp-navigation">
            <h5>Navigation</h5>
            <ul><li><a href="https://en.cppreference.com/w/cpp/language/user_literal">Online version</a></li><li>Offline version retrieved 2022-07-30 14:05.</li></ul></div>
                        <ul id="footer-info">
                                    <li id="footer-info-lastmod"> This page was last modified on 23 May 2022, at 19:41.</li>
                                    <li id="footer-info-viewcount">This page has been accessed 590,898 times.</li>
                            </ul>
                    </div>
        </div>
        <!-- /footer -->
        <script>if(window.mw){
mw.loader.state({"site":"loading","user":"missing","user.groups":"ready"});
}</script>
<script src="../../../common/skin_scripts.js"></script>
<script>if(window.mw){
mw.loader.load(["mediawiki.action.view.postEdit","mediawiki.user","mediawiki.page.ready","mediawiki.searchSuggest","mediawiki.hidpi","ext.gadget.ColiruCompiler","ext.gadget.MathJax"], null, true);
}</script>
<script src="../../../common/site_scripts.js"></script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2828341-1']);
_gaq.push(['_setDomainName', 'cppreference.com']);
_gaq.push(['_trackPageview']);
</script><!-- Served in 5.255 secs. -->
	</body>
<!-- Cached 20220628052250 -->
</html>